function oTemplateEngine(engine) {
  this.engine = engine;
}

oTemplateEngine.prototype = {
  // 此处的渲染是通过App.vue的$nextTick调用，一定是vue+前端脚本都执行完才会处理的，相当保险。
  render: function () {
    // debugger
    let o = this;
    // let oContainerAppDom = $("div [o-Container-App]");
    // $("div [o-container-app]").css("display", "none");
    // 设置为none会造成部分页面兼容性宽度不正确，所以只能用透明度曲线解决， 还原代码在 Router.js 中实现。
    $("div [o-container-app]").css("opacity", "0");

    // 检索八爪鱼容器对象
    let oContainerDom = $("div [o-Container]");
    // 八爪鱼容器在一个页面，只允许出现一次，因为模板也只有一个对应。
    if (oContainerDom.length == 1) {
      // 取得容器的Jquery对象。
      let o_Container = $(oContainerDom.get(0));
      if (o_Container.attr("o-Container") != "true") {
        // 尝试渲染模板
        let tmpPath = "/static/skin/" + this.getTheme().name + this.engine.router.get().path + "/template.html";
        // console.warn(this.getTheme().name);
        $.ajax({
          type: "GET",
          cache: false,
          url: tmpPath,
          data: "",
          complete: function (data) {
            // console.log("KKKKK-------"+tmpPath);
            // 认为地址不存在，模版页中不会存在HTML
            if (JSON.stringify(data).indexOf("<html") > -1) {
              // 设置为默认模版
              tmpPath = "/static/skin/" + o.getTheme().name + "/engine/base/default/template.html";
              // console.log("KKKKKK======="+data.toString().indexOf("html"));
            }
            // console.log("KKKKKK:::"+JSON.stringify(data));
            // 调用八爪鱼Request引擎请求HTML模板资源
            o.getHtml(tmpPath, o_Container);
          }
        });
      } else {
        this.engine.tips.info("八爪鱼已渲染过该页，再次进入本页，可在此写入适当的更新脚本。");
      }
    } else {
      this.engine.tips.warning("八爪鱼渲染框架未找到容器标记。")
    }

    this.engine.tips.debug("[template] 八爪鱼渲染模版成功。");
  },
  getHtml: function (path, container) {
    let o = this;
    // 确认找到渲染数据，然后设置为true，下次进来，则不会渲染，不管Ajax是否请求到，只请求一次，否则next和update会冲突。
    container.attr("o-Container", true);
    this.engine.request.getHTML(path, function (data) {
      // 采用Jquery的方式才能加载使用js，而且内嵌js不会报错。
      container.append(data);
      container.find("[o-id]").each(function (index, item) {
        //$(item).append($("#" + $(item).attr("o-id")));
        // const 常量：不可改变、常驻内存。
        let oid = $(item).attr("o-id");
        let oControl = $("#" + oid);
        if (oControl.length == 1) {
          $(item).html(oControl);
        } else {
          o.engine.tips.warning("渲染引擎未找到目标组件：id=" + oid + "。")
        }
      });
    }, function (msg) {
      // 找不到设置模版，则采用默认模版地址
      o.engine.tips.debug("渲染模板异常，状态" + msg.status + "，描述：" + msg.statusText + "，模版地址：" + msg.url + "。");
    });
  },
  getTheme: function () {
    let theme;
    $(this.engine.passport.theme).each(function (index, item) {
      if (item.use) {
        theme = item;
        return false;
      }
    });
    return theme;
  },
  choiceTheme: function (name) {
    $(this.engine.passport.theme).each(function (index, item) {
      // 找到选中的进行数据修改。
      if (item.name == name) {
        item.use = true;
      } else {
        item.use = false;
      }
    })
  }
}

export {
  oTemplateEngine
}


